﻿using System;
using System.Collections.Generic;
using System.Linq;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.UserControls.Curriculo.Cadastro
{
    public partial class ExperienciaProfissional : Curriculo, ICurriculo
    {
        public List<Domain.ExperienciaProfissional> Entidades { private get; set; }

        public string ValidationGroup
        {
            get { return txtDescricao.ValidationGroup; }
            set
            {
                txtDescricao.ValidationGroup =
                    txtEmpresa.ValidationGroup =
                    txtRemuneracao.ValidationGroup =
                    txtDataEntrada.ValidationGroup = txtDataSaida.ValidationGroup = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Cargo.DropDownArea.TextChanged += OnChangeControl;
            Cargo.DropDownEspecializacaoArea.TextChanged += OnChangeControl;
            mskRemuneracao.Culture = CultureHelper.Cultura;

            if (IsPostBack) return;

            PreencherFormaContratacao();
        }

        private void PreencherFormaContratacao()
        {
            var formaContratacoes = new FormaContratacao().SelectAllActive<FormaContratacao>();
            WebHelper.FillDropDownList(ddlFormaContratacao, formaContratacoes, true);
        }

        public void Editar()
        {
            var experienciaProfissional = (from espec in Entidades
                                           where espec.Id.Equals(IdEntidade)
                                           select espec).FirstOrDefault();

            txtDescricao.Value = experienciaProfissional.Descricao;
            txtEmpresa.Value = experienciaProfissional.Empresa;
            txtDataEntrada.Value = experienciaProfissional.DataEntrada;
            txtDataSaida.Value = experienciaProfissional.DataSaida;
            txtRemuneracao.Text = experienciaProfissional.Remuneracao.ToString();
            ddlFormaContratacao.SelectedValue = experienciaProfissional.IdFormaContratacao.ToString();
            chkExibirRemuneracao.Checked = experienciaProfissional.ExibirRemuneracao;
            Cargo.DropDownArea.SelectedValue = experienciaProfissional.Cargo.EspecializacaoArea.Area.Id.ToString();
            Cargo.PreencherEspecializacaoArea();
            Cargo.DropDownEspecializacaoArea.SelectedValue =
                experienciaProfissional.Cargo.EspecializacaoArea.Id.ToString();
            Cargo.PreencherCargo();
            Cargo.DropDownCargo.SelectedValue = experienciaProfissional.IdCargo.ToString();
        }

        public void LimparCampos()
        {
            txtDescricao.Value = string.Empty;
            txtDataEntrada.Value = null;
            txtDataSaida.Value = null;
            txtEmpresa.Value = string.Empty;
            txtRemuneracao.Text = string.Empty;
            ddlFormaContratacao.SelectedIndex = 0;
        }

        public void Salvar()
        {
            var experiencia = IsNew
                                  ? new Domain.ExperienciaProfissional()
                                  : Entidades.Where(esp => esp.Id == IdEntidade).FirstOrDefault();

            experiencia.Ativo = true;
            experiencia.DataEntrada = txtDataEntrada.Value.Value;
            experiencia.DataSaida = txtDataSaida.Value;
            experiencia.Descricao = txtDescricao.Value;
            experiencia.IdCurriculo = IdCurriculo;
            experiencia.Empresa = txtEmpresa.Value;
            experiencia.ExibirRemuneracao = chkExibirRemuneracao.Checked;
            experiencia.IdCargo = int.Parse(Cargo.DropDownCargo.SelectedValue);
            experiencia.IdFormaContratacao = int.Parse(ddlFormaContratacao.SelectedValue);

            if (!string.IsNullOrEmpty(txtRemuneracao.Text))
                experiencia.Remuneracao = decimal.Parse(txtRemuneracao.Text);

            experiencia.Save();

            if (IsNew)
                Entidades.Add(experiencia);
        }
    }
}